package cacheMap

import (
	"github.com/gogf/gf/container/gmap"
	"github.com/gogf/gf/os/gtimer"
	"strings"
	"time"
)

// 缓存数据 用户信息
//"ChannelType_"+v.UserId -> redis
//var User *gmap.Map
//type UserMsg struct {
//	ChannelType int
//}

// 缓存数据 当前群的最后的技能组客服id
//"LastAccessSkillGroupId_"+skillGroupId -> redis
//var LastAccessSkillGroupCS *gmap.Map

// 缓存数据 群欢迎语是否去发送 0 不发送；1 发送
//"SendGroupWelcomeText_"+params.GroupId -> redis
//var GroupWelcomeMsg *gmap.Map

// 缓存数据 是否已经发送当前群主的自我介绍 0 未发送；1 已发送
//"SendIntroductionText_"+params.GroupId -> redis
//var Introduction *gmap.Map

// 缓存数据 客服信息
var CustomerService *gmap.Map

type CustomerServiceMsg struct {
	Name   string
	Avatar string
}

// 缓存数据 群数据
var Group *gmap.Map

// 缓存数据 群-机器人
var GroupRobot *gmap.Map

// 缓存数据 群成员数据
var GroupMember *gmap.Map

// 缓存数据 群当前发出邀请的人
var InvitationMember *gmap.Map

// 缓存数据 群当前发出邀请的人详情
var InvitationMemberDetail *gmap.Map

// 配置信息
var UpdateUserRefreshRonCloud *gmap.Map

// 配置信息
var ToBeAllocated *gmap.Map

// 配置信息
var GroupIsBrowseCurrentMsg *gmap.Map

// 缓存数据 客户是否在线 0 不在线；1 在线
var CustomerOnline *gmap.Map

// 配置信息
var ConfigMsg *gmap.Map

func InitCacheMap() {
	//
	//User = gmap.New(true)
	//LastAccessSkillGroupCS = gmap.New(true)
	//GroupWelcomeMsg = gmap.New(true)
	//Introduction = gmap.New(true)
	CustomerService = gmap.New(true)
	Group = gmap.New(true)
	GroupRobot = gmap.New(true)
	GroupMember = gmap.New(true)
	InvitationMember = gmap.New(true)
	InvitationMemberDetail = gmap.New(true)
	UpdateUserRefreshRonCloud = gmap.New(true)
	ToBeAllocated = gmap.New(true)
	GroupIsBrowseCurrentMsg = gmap.New(true)
	CustomerOnline = gmap.New(true)
	ConfigMsg = gmap.New(true)
	//
	gtimer.AddSingleton(2*time.Second, func() {
		//
		isDelete := 0
		deleteKey := ""
		InvitationMemberDetail.Iterator(func(k interface{}, v interface{}) bool {
			if v.(int64) < time.Now().Unix() {
				key := strings.Split(k.(string), "_")
				groupId := key[0]
				userId := key[1]
				invitationMemberCache := InvitationMember.Get(groupId)
				invitationMemberCacheNew := make([]string, 0)
				if invitationMemberCache != nil {
					for _, vv := range invitationMemberCache.([]string) {
						if userId != vv {
							invitationMemberCacheNew = append(invitationMemberCacheNew, vv)
						}
					}
					if len(invitationMemberCacheNew) > 0 {
						InvitationMember.Set(groupId, invitationMemberCacheNew)
					} else {
						InvitationMember.Remove(groupId)
					}
				}
				isDelete = 1
				deleteKey = k.(string)
				return true
			} else {
				return false
			}
		})
		if isDelete == 1 {
			InvitationMemberDetail.Remove(deleteKey)
		}
		//
		UpdateUserRefreshRonCloud.Iterator(func(k interface{}, v interface{}) bool {
			return true
		})
	})
}
